/**
 * 练习题相关工具函数
 */

/**
 * 比较用户答案与标准答案是否匹配
 * @param {string} userAnswer - 用户答案
 * @param {string} standardAnswer - 标准答案
 * @param {string} questionType - 题目类型
 * @returns {boolean} 是否匹配
 */
export function checkAnswerMatch(userAnswer, standardAnswer, questionType) {
  if (!userAnswer || !standardAnswer) {
    return false;
  }

  userAnswer = userAnswer.trim();
  standardAnswer = standardAnswer.trim();

  // 处理选择题
  if (questionType === '选择题') {
    return userAnswer.toUpperCase() === standardAnswer.toUpperCase();
  }

  // 处理填空题
  if (questionType === '填空题') {
    // 标准答案可能有多个可接受答案，用逗号分隔
    const possibleAnswers = standardAnswer.split(',').map(a => a.trim().toLowerCase());
    return possibleAnswers.includes(userAnswer.toLowerCase());
  }

  // 处理简答题/解答题 - 使用更宽松的匹配
  // 对于这类题目，如果用户答案包含标准答案的关键词，或标准答案包含用户答案，则视为可能正确
  if (questionType === '简答题' || questionType === '解答题' || questionType === '计算题') {
    // 简单判断，实际应用可能需要更复杂的算法
    const userKeywords = userAnswer.toLowerCase().split(/\s+/);
    const standardKeywords = standardAnswer.toLowerCase().split(/\s+/);
    
    // 计算共同关键词数
    const commonKeywords = userKeywords.filter(word => 
      standardKeywords.includes(word) && word.length > 1
    );
    
    // 如果共同关键词数量占标准答案关键词的一定比例，视为可能匹配
    return commonKeywords.length >= Math.min(3, Math.floor(standardKeywords.length * 0.6));
  }

  // 默认使用完全匹配
  return userAnswer.toLowerCase() === standardAnswer.toLowerCase();
}

/**
 * 格式化填空题显示
 * @param {string} content - 题目内容
 * @returns {string} 格式化后的HTML内容
 */
export function formatFillinQuestion(content) {
  if (!content) return '';
  // 替换下划线为带样式的空白
  return content.replace(/_{3,}/g, '<span class="blank-line">___________</span>');
}

/**
 * 从题目内容中提取选项
 * @param {string} content - 题目内容
 * @returns {Object} 选项对象 {A: "选项内容", B: "选项内容", ...}
 */
export function extractOptions(content) {
  if (!content) return {};
  
  const options = {};
  const lines = content.split('\n');
  
  // 跳过第一行(题干)，从第二行开始处理
  for (let i = 1; i < lines.length; i++) {
    const line = lines[i].trim();
    if (!line) continue;
    
    // 匹配 A. 选项内容 或 A、选项内容 或 A:选项内容 等格式
    const match = line.match(/^([A-Z])[.、:\s]\s*(.+)$/);
    if (match) {
      options[match[1]] = match[2].trim();
    }
  }
  
  return options;
}

/**
 * 获取题目类型的友好显示名称
 * @param {string} typeCode - 题目类型代码
 * @returns {string} 友好显示名称
 */
export function getQuestionTypeName(typeCode) {
  const typeMap = {
    'multiple-choice': '选择题',
    'fill-blank': '填空题',
    'short-answer': '简答题',
    'calculation': '计算题',
    'true-false': '判断题'
  };
  
  return typeMap[typeCode] || typeCode;
}

/**
 * 根据正确率获取对应的掌握程度描述
 * @param {number} correctRate - 正确率(0-100)
 * @returns {string} 掌握程度描述
 */
export function getMasteryLevelDescription(correctRate) {
  if (correctRate >= 90) return '优秀';
  if (correctRate >= 80) return '良好';
  if (correctRate >= 70) return '中等';
  if (correctRate >= 60) return '及格';
  return '需要提高';
} 